import pandas as pd
from ListUtils import anti_join
from DatetimeUtils import choose_day
import time
"""
IPO新股
"""



def deal_append(query_start_, query_end_, engine, pro):
    """
    通过anti_join函数处理增量数据
    """
    source_list_ = pro.new_share(start_date=query_start_, end_date=query_end_)
    # 最好是单元数组，不然merge之后会有问题。
    sql_ = 'select s.ts_code from new_share s WHERE s.ipo_date >= ' + query_start_ + ' and s.ipo_date <= ' + query_end_
    target_list_ = pd.read_sql(sql_, engine)
    if len(target_list_) == 0:
        # 数据库内未找到数据则全部添加
        source_list_.to_sql('new_share', con=engine, index=False, index_label='ts_code', if_exists='append')
        print('数据库内未找到数据则全部添加：(%s)' % source_list_)
        time.sleep(6)

    else:
        # 数据库内有历史数据则增量添加
        source_list_ = anti_join(source_list_, target_list_, 'ts_code')
        if len(source_list_) > 0:
            print('增量：(%s)' % source_list_)
            # print(source_list_)
            # source_list_.drop(labels='exists',axis=1,inplace=True)
            source_list_.to_sql('new_share', con=engine, index=False, index_label='ts_code', if_exists='append')
            time.sleep(6)




def insert_history_data_new_share(engine, pro):
    """
    保存历史数据，通过对比添加数据
    """
    insert_history_data_flag = True
    if insert_history_data_flag:

        current_year = choose_day(0).strftime('%Y')
        start_year = 2008  # IPO记录从20080103开始
        """
        处理历史数据
        """
        for i in range(start_year, int(current_year)):
            query_start = '%d' % i + '0101'  # 查询开始
            query_end = '%d' % i + '1231'  # 查询结束
            deal_append(query_start, query_end, engine, pro)

        """
        处理当年数据
        """
        current_day = choose_day(0).strftime('%Y%m%d')
        year_first_day = current_year + '0101'
        deal_append(year_first_day, current_day, engine, pro)




def update_current_data_new_share(engine, pro):
    """
    更新当前数据，后续使用定时器
    """
    insert_current_flag = True
    if insert_current_flag:
        day_updates = 30 #设定更新30天数据
        current_day = choose_day(0).strftime('%Y%m%d')
        that_day = choose_day(day_updates).strftime('%Y%m%d')
        deal_append(that_day, current_day, engine, pro)